﻿Identifier = (name : string)

StringLiteral = ...
UserDefinedStringLiteral = ...

UnqualifiedId:
    Identifier (name : Identifier)

# P1626 A.4 Expressions

Expression:
    Primary:
        Literal (value : Literal)
        This
        Parenthesized (operand : Expression)
        Id:
            UnqualifiedId (id : UnqualifiedId)
            QualifiedId (id : QualifiedId)
        Lambda (?)
        Fold (?)
        Requires (?)


# P1639 A.9 Overloading

OperatorFunctionId = (op : Operator)
Operator: one of
    New Delete ArrayNew ArrayDelete CoAwait Call Subscript PointerAccess MemberPointerAccess
    BitwiseNot LogicalNot Add Subtract Multiply Divide Modulo BitwiseXor BitwiseAnd
    BitwiseOr Assign AddAssign SubtractAssign MultiplyAssign DivideAssign ModuloAssign BitwiseXorAssign BitwiseAndAssign
    BitwiseOrAssign EqualTo NotEqualTo LessThan GreaterThan LessEqual GreaterEqual Compare LogicalAnd
    LogicalOr LeftShift RightShift LeftShiftAssign RightShiftAssign Increment Decrement Comma
LiteralOperatorId:
    String (value : StringLiteral, suffix : Identifier)
    UserDefinedString (value : UserDefinedStringLiteral)
